package com.bh.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bh.order.domain.JcOrder;
import com.bh.order.dto.JcOrderQueryDto;
import com.bh.order.vo.*;

import java.util.List;
import java.util.Map;

/**
 * 订单Service接口
 *
 * @author slx
 * @date 2023-04-22
 */
public interface IJcOrderService extends IService<JcOrder> {
    /**
     * 查询订单
     *
     * @param id 订单主键
     * @return 订单
     */
    public JcOrder selectJcOrderById(Long id);

    /**
     * 专门查询收货人、收货人订单
     *
     * @param id
     * @return 订单
     */
    public JsOrderToAndReceiveVo selectToAndReceiveVoById(Long id);

    /**
     * 查询订单
     *
     * @param code
     * @return 订单
     */
    public JcOrder selectJcOrderByCode(String code);


    /**
     * 查询订单列表
     *
     * @param jcOrder 订单
     * @return 订单集合
     */
    public List<JcOrderRowVo> selectJcOrderList(JcOrderQueryDto jcOrder);


    /**
     * 查询订单列表
     *
     * @param jcOrder 订单
     * @return 订单集合
     */
    public List<JcOrderVO> selectJcOrderVoList(JcOrderQueryDto jcOrder);

    /**
     * 查询订单列表
     *
     * @param jcOrder 订单
     * @return 订单集合
     */
    public Map<String, Object> selectJcOrderVoListStatistics(JcOrderQueryDto jcOrder);
    /**
     * 查询订单列表
     *
     * @param jcOrder 订单
     * @return 订单集合
     */
    public List<JcOrderCustVO> selectJcOrderCustVoList(JcOrderQueryDto jcOrder);

    /**
     * 查询订单列表
     *
     * @param jcOrder 订单
     * @return 订单集合
     */
    public List<JcOrderSysApiVO> selectJcOrderSysApiVoList(JcOrderQueryDto jcOrder);

    /**
     * 查询 查询订单收入确认列表
     *
     * @param jcOrder 订单
     * @return 订单集合
     */
    public List<JcOrderVO> selectLedgerDetailList(JcOrderQueryDto jcOrder);

    /**
     * 查询订单列表
     *
     * @param jcOrder 订单
     * @return 订单集合
     */
    public List<JcOrderRowVo> selectCustJcOrderList(JcOrderQueryDto jcOrder);

    /**
     * 导入订单
     *
     * @param orderList        订单数据列表
     * @param isUpdateSupport  是否更新已经存在的订单数据
     * @param operName         操作用户
     * @return 结果
     */
    public String importNewOrder(List<JcOrderImportVo> orderList, Boolean isUpdateSupport, String operName);

    /**
     * 新增订单
     *
     * @param jcOrder 订单
     * @return 结果
     */
    public int insertJcOrder(JcOrder jcOrder);

    /**
     * 复核订单
     *
     * @param recheckVO
     * @return 结果
     */
    public int recheckOrder(JcOrderRecheckVO recheckVO);
    /**
     * 新增订单
     *
     * @param ids
     * @return 结果
     */
    public int confirmOrderSave(String[] ids);

    /**
     * 修改订单
     *
     * @param jcOrder 订单
     * @return 结果
     */
    public int updateJcOrder(JcOrder jcOrder);

    /**
     * 修改订单
     * @param order
     * @param time
     * @param reason
     * @return 结果
     */
    public int saveAbnormalJcOrder(JcOrder order, String reason);

    /**
     * 复制订单
     * @param ids
     * @param operName
     * @return
     */
    public int copyOrders(Long[] ids, String operName);

    /**
     * 批量删除订单
     *
     * @param ids 需要删除的订单主键集合
     * @return 结果
     */
    public int deleteJcOrderByIds(Long[] ids);

    /**
     * 删除订单信息
     *
     * @param id 订单主键
     * @return 结果
     */
    public int deleteJcOrderById(Long id);



    /**
     * 接口批量删除订单
     *
     * @param ids 需要删除的订单主键集合
     * @return 结果
     */
    public int deleteSysJcOrderByIds(String[] ids);
}
